use crate::rpc::http::HttpResponse;

// 定义 UI 线程可以发送给网络线程的命令
#[derive(Debug, Clone)]
pub enum NetworkCommand {
    Connect(String), // 地址, 协议
    Send(Vec<u8>),
    #[allow(dead_code)]
    Disconnect,
}

// 定义网络线程可以发送给 UI 线程的事件
#[derive(Debug)]
pub enum NetworkEvent {
    Connected,
    DataReceived(Vec<u8>),
    Error(String),
    Disconnected,
    HttpResponse(Result<Box<HttpResponse>, String>),
}

#[derive(Default, Debug, Clone, Copy, PartialEq)]
pub enum HttpMethod {
    #[default]
    Get,
    Post,
    Put,
    Delete,
    Patch,
}

#[derive(Default, Debug, Clone, Copy, PartialEq)]
pub enum HttpResponseContentType {
    #[default]
    Json,
    Xml,
    Text,
    Html,
}

#[derive(Default, Debug, Clone, Copy, PartialEq)]
pub enum HttpRequestContentType {
    #[default]
    Json,
    Xml,
    Text,
    Html,
    FormData,
    Raw,
}

#[derive(Clone, Copy, PartialEq, Default, Debug)]
pub enum ProtocolType {
    #[default]
    Tcp,
    Udp,
    Http,
}

// 表示连接状态
#[derive(Clone, Copy, PartialEq, Default)]
pub enum ConnectionStatus {
    #[default]
    Disconnected,
    Connecting,
    Connected,
}

// 状态机。当前位于哪个ui(当前在干什么)
#[derive(Default, PartialEq, Clone, Copy)]
pub enum AppMode {
    #[default]
    Normal,                   // 普通模式，即：啥也不做的模式
    EditingData,              // 修改 data
    EditingAddress,           // 修改server_address
    EditingHeaders,           // 修改headers
    EditingParams,            // 修改parameters
    EditingBody,              // 修改body
    ConfirmingQuit,           // 确认退出状态
    ConfirmingSwitchProtocol, // 确认切换协议状
    ConfirmingHttpRequesting, // 确认发送http请求
    ConfirmingClearScreen,    // 确认清屏
    ConfirmingConnect,        // 确认连接状态
    ConfirmingSend,           // 确认发送数据
    ConfirmingDisconnect,     // 确认断开连接
}

/// 弹窗等级
pub enum PromptLevel {
    Normal,
    Warning,
    Error,
}
